

package hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

/*
O bloco estático das linhas 4 a 8 cuidará de configurar o Hibernate e pegar uma
SessionFactory.
IMPORTANTE: metodo static final - ´so é executado uma vez;
 O método getSessionFactory devolverá uma Session, conseguida através do SessionFactory do Hibernate.
 */
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

    static {
        try {
             sessionFactory = new AnnotationConfiguration().
                     configure("hibernate.cfg.xml").buildSessionFactory();
            } catch (Throwable ex) {
               // Log the exception.
               System.err.println("Inciação da criação do SessionFactory falhou." + ex);
               throw new ExceptionInInitializerError(ex);
            }
      }

    public static Session getInstance()throws HibernateException {
        Session session = (Session)threadLocal.get();
        session = sessionFactory.openSession();
        threadLocal.set(session);
        return session;
    }
}
